package peakindexinmountainarray

/*
查找到山峰数组的山峰
首先，思路：使用二分法进行查找，这类数组属于部分有序数组
1：设置low和high的指针
2：计算mid中间值，通过arr[mid]和arr[mid + 1]或者arr[mid]和arr[mid - 1]的值进行比较大小
3：退出循环的条件：low < high ，和普通的二分跳出循环条件不同，是因为在else条件下high = mid ，所以这种情况下，可能会出现low = high的死循环现象
*/

func peakIndexInMountainArray(arr []int) int {
	low, high := 0, len(arr)
	for low < high {
		mid := low + (high-low)>>1
		if arr[mid] < arr[mid+1] {
			low = mid + 1
		} else {
			high = mid
		}
	}
	return low
}
